59. 螺旋矩阵 II

59. 螺旋矩阵 II

59. 螺旋矩阵 II - 力扣(LeetCode)

代码

func generateMatrix(n int) [][]int {
    res := make([][]int, n)

    for i := range res {
        res[i] = make([]int, n)
    }

    // 方向
    // 右下左上
    direction := [][]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}

    curDirectionIdx := 0
    curPos := []int{0, 0}
    for i := 0; i < n*n; i++ {
        res[curPos[0]][curPos[1]] = i+1

        nexPos := []int{curPos[0]+direction[curDirectionIdx][0], curPos[1] + direction[curDirectionIdx][1]}
        if  nexPos[0] < 0 || nexPos[0] >= n ||
            nexPos[1] < 0 || nexPos[1] >= n || 
            res[nexPos[0]][nexPos[1]] > 0 {
                curDirectionIdx = (curDirectionIdx+1)%4
                nexPos = []int{curPos[0]+direction[curDirectionIdx][0], curPos[1] + direction[curDirectionIdx][1]}
        }

        curPos = nexPos
    }

    return res
}

非常好,螺旋矩阵做的很快

几个关键因素

  1. 定义方向数组
  2. 当前方向
  3. 当前位置
  4. 转方向的条件

上一题: 54. 螺旋矩阵
上一题使用的是题解中某一个做法,四次方向转换都在循环中完成

这次用的是方向做法


本站总访问量次 本站访客数人次 本文总阅读量